// generate-readme.cjs
const fs = require('fs');
const path = require('path');

const pkgPath = path.join(process.cwd(), 'package.json');
if (!fs.existsSync(pkgPath)) {
  console.error('package.json not found in project root.');
  process.exit(1);
}
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));

function formatDeps(deps) {
  if (!deps || Object.keys(deps).length === 0) return 'None';
  return Object.entries(deps).map(([k,v]) => `- ${k}: \`${v}\``).join('\n');
}

// 添加脚本描述映射
const scriptDescriptions = {
  'dev': '启动开发服务器',
  'build': '构建生产版本',
  'lint': '检查代码规范',
  'lint:fix': '自动修复代码规范问题',
  'prettier': '检查代码格式',
  'prettier:fix': '自动格式化代码',
  'preview': '预览生产构建',
  'prepare': '初始化 husky Git hooks',
  'generate-readme': '自动生成项目 README 文档'
};

function formatScripts(scripts) {
  if (!scripts || Object.keys(scripts).length === 0) return 'None';
  return Object.entries(scripts).map(([name, command]) => {
    const description = scriptDescriptions[name] || '自定义脚本';
    return `- **${name}**: \`${command}\`\n  - ${description}`;
  }).join('\n');
}

// 基于真实目录结构的项目结构描述
const realStructure = `
\`\`\`
project/
├── public/                  # 静态资源目录
│   └── favicon.ico         # 网站图标
├── src/                    # 源代码目录
│   ├── api/                # API接口管理
│   ├── assets/             # 静态资源文件
│   │   ├── images/         # 图片资源
│   │   └── styles/         # 样式资源
│   ├── components/         # 公共组件库
│   │   ├── business/       # 业务组件
│   │   └── common/         # 通用组件
│   ├── config/             # 项目配置文件
│   ├── layouts/            # 页面布局组件
│   ├── locales/            # 国际化资源文件
│   ├── pages/              # 页面组件
│   ├── router/             # 路由配置
│   ├── stores/             # 状态管理
│   ├── types/              # TypeScript类型定义
│   ├── utils/              # 工具函数库
│   ├── App.tsx             # 根组件
│   └── main.tsx            # 入口文件
├── .husky/                 # Git hooks配置
├── .vscode/                # VSCode配置文件
├── node_modules/           # 项目依赖包
├── .editorconfig           # 编辑器配置
├── .env                    # 环境变量配置
├── .env.development        # 开发环境变量配置
├── .env.production         # 生产环境变量配置
├── .env.test               # 测试环境变量配置
├── .eslintrc.cjs           # ESLint配置文件
├── .gitignore              # Git忽略配置
├── .prettierignore         # Prettier忽略配置
├── .prettierrc             # Prettier配置文件
├── index.html              # HTML模板文件
├── package.json            # 项目配置文件
├── pnpm-lock.yaml          # pnpm依赖锁定文件
├── postcss.config.js       # PostCSS配置文件
├── README.md               # 项目说明文档
├── tailwind.config.js      # TailwindCSS配置文件
├── tsconfig.json           # TypeScript配置文件
├── tsconfig.node.json      # Node环境TypeScript配置
└── vite.config.ts          # Vite构建配置文件
\`\`\`
`;

// 文件和目录详细作用说明
const detailedDescriptions = `
### 各文件和目录详细作用说明

#### 根目录文件
- **package.json**: 项目配置文件，定义项目元数据、依赖关系和可执行脚本
- **pnpm-lock.yaml**: pnpm包管理器的依赖锁定文件，确保依赖版本一致性
- **tsconfig.json**: TypeScript编译器配置文件，定义编译选项和项目根目录
- **tsconfig.node.json**: Node环境下的TypeScript配置，用于构建工具等
- **vite.config.ts**: Vite构建工具配置文件，定义开发服务器和构建行为
- **tailwind.config.js**: TailwindCSS配置文件，定义自定义样式和主题
- **postcss.config.js**: PostCSS配置文件，用于处理CSS转换
- **.eslintrc.cjs**: ESLint代码检查工具配置文件，定义代码规范规则
- **.prettierrc**: Prettier代码格式化工具配置文件
- **.prettierignore**: Prettier格式化忽略规则配置
- **.editorconfig**: 编辑器配置文件，统一不同编辑器的代码格式
- **.env***: 环境变量配置文件，分别对应不同运行环境
- **.gitignore**: Git版本控制忽略规则配置
- **index.html**: 主HTML模板文件，Vite以此为基础构建应用
- **README.md**: 项目说明文档

#### public/ 目录
- **favicon.ico**: 网站图标文件，在浏览器标签页显示

#### src/ 目录 (源代码主目录)
- **api/**: API接口管理模块，统一处理所有后端接口请求
- **assets/**: 静态资源文件目录
  - **images/**: 图片资源文件
  - **styles/**: 全局样式文件
- **components/**: React组件库
  - **business/**: 业务相关组件，与具体业务逻辑相关
  - **common/**: 通用基础组件，可在多个业务场景复用
- **config/**: 项目配置文件，如API地址、功能开关等
- **layouts/**: 页面布局组件，如主布局、登录布局等
- **locales/**: 国际化资源文件，支持多语言
- **pages/**: 页面级组件，每个路由对应一个页面组件
- **router/**: 路由配置文件，定义应用路由映射关系
- **stores/**: 状态管理模块，使用Zustand管理全局状态
- **types/**: TypeScript类型定义文件，定义项目中的接口和类型
- **utils/**: 工具函数库，提供通用的辅助函数
- **App.tsx**: 根组件，所有页面的容器组件
- **main.tsx**: 应用入口文件，负责初始化和挂载React应用

#### 配置目录
- **.husky/**: Git hooks配置目录，用于在Git操作时执行脚本
- **.vscode/**: VSCode编辑器配置目录，包含推荐插件和设置
`;

const md = [
`# ${pkg.name || 'Project Name'}`,
'',
pkg.description || '这是一个基于现代前端技术栈的项目。',
'',
pkg.repository && pkg.repository.url ? `**仓库地址**: ${pkg.repository.url}` : '',
'',
pkg.homepage ? `**项目主页**: ${pkg.homepage}` : '',
'',
`## 项目概述`,
'',
'本项目是一个使用 React 19、Vite 7 和 Ant Design 5 构建的现代化前端应用。项目采用模块化架构设计，支持热重载开发、代码规范检查和自动化构建。',
'',
`## 快速开始`,
'',
'安装项目依赖:',
'',
'```bash',
'npm install',
'```',
'',
'启动开发服务器:',
'',
'```bash',
'npm run dev',
'```',
'',
'构建生产版本:',
'',
'```bash',
'npm run build',
'```',
'',
`## 可用脚本`,
'',
pkg.scripts && Object.keys(pkg.scripts).length ? formatScripts(pkg.scripts) : '',
'',
`## 依赖说明`,
'',
'### 生产依赖',
'项目运行所需的核心依赖包：',
'',
formatDeps(pkg.dependencies),
'',
'### 开发依赖',
'项目开发和构建所需的工具包：',
'',
formatDeps(pkg.devDependencies),
'',
`## 技术栈`,
'',
'- **框架**: React 19',
'- **UI库**: Ant Design 5',
'- **构建工具**: Vite 7',
'- **路由**: React Router 7',
'- **状态管理**: Zustand 5',
'- **样式**: TailwindCSS + Less',
'- **代码规范**: ESLint + Prettier',
'- **Git钩子**: Husky + lint-staged',
'- **语言**: TypeScript',
'',
`## 项目结构`,
'',
realStructure,
'',
detailedDescriptions,
'',
`## 开发规范`,
'',
'### 代码规范',
'- 使用 ESLint 进行代码检查',
'- 使用 Prettier 进行代码格式化',
'- 提交代码前会自动执行 lint-staged 检查',
'',
'### Git 提交规范',
'- 使用 conventional commits 规范',
'- 提交前会自动运行代码检查',
'- 自动化生成 CHANGELOG',
'',
`## 环境配置`,
'',
'项目支持多种环境配置:',
'- 开发环境 (development)',
'- 测试环境 (test)',
'- 生产环境 (production)',
'',
'通过设置 \`NODE_ENV\` 环境变量来指定运行环境。',
'',
pkg.license ? `## 许可证\n\n本项目采用 ${pkg.license} 许可证。` : ''
].filter(Boolean).join('\n');

fs.writeFileSync(path.join(process.cwd(), 'README.md'), md, 'utf8');
console.log('README.md generated/updated from package.json');